﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Sistema_financiero
{
    public partial class frm_Alta_Garante : Form
    {
        public Entidades.Cliente ClienteNuevo = new Sistema_financiero.Entidades.Cliente();
        public List<Entidades.Escritura> Lista_escrituras = new List<Sistema_financiero.Entidades.Escritura>();
        public List<Entidades.Vehiculo> Lista_vehiculos = new List<Sistema_financiero.Entidades.Vehiculo>();
        public Entidades.Vehiculo Vehiculo_quitar = new Sistema_financiero.Entidades.Vehiculo();
        public Entidades.Escritura Escritura_quitar = new Sistema_financiero.Entidades.Escritura();
        public int id, id_situacion_iva;
        public string apellido, nombres;

        public frm_Alta_Garante()
        {
            InitializeComponent();

            //ID Cliente
            tbx_Nro_cliente.Text = Convert.ToString(Entidades.Cliente.Obtener_id_cliente());

            //Escrituras
            Enable_disable_quitar_escritura(dgv_Escrituras.RowCount);
            Enable_disable_quitar_vehiculo(dgv_Vehiculos.RowCount);

            //Carga provincias

            cbx_Provincia.DataSource = Sistema_financiero.Entidades.Provincia.Obtener_Provincias();
            cbx_Provincia.DisplayMember = "Descripcion";
            cbx_Provincia.ValueMember = "ID";

            cbx_Provincia.SelectedValue = 20; //Santa Fe

            //Carga departamentos

            cbx_Departamento.DataSource = Sistema_financiero.Entidades.Departamento.Obtener_Departamentos(Convert.ToInt32(cbx_Provincia.SelectedValue));
            cbx_Departamento.DisplayMember = "Descripcion";
            cbx_Departamento.ValueMember = "ID";

            cbx_Departamento.SelectedValue = 511; //Castellanos

            // Carga Localidades

            cbx_Localidad.DataSource = Sistema_financiero.Entidades.Localidad.Obtener_Localidades(Convert.ToInt32(cbx_Departamento.SelectedValue));
            cbx_Localidad.DisplayMember = "Descripcion";
            cbx_Localidad.ValueMember = "ID";

            cbx_Localidad.SelectedValue = 4749; //Rafaela

            //Carga Tipo de documento

            cbx_Tipo_doc.DataSource = Sistema_financiero.Entidades.Tipo_documento.Obtener_Tipo_documento();
            cbx_Tipo_doc.DisplayMember = "Descripcion";
            cbx_Tipo_doc.ValueMember = "ID";

            cbx_Tipo_doc.SelectedIndex = 4;

            //Carga Estado civil
            cbx_Estado_civil.DataSource = Sistema_financiero.Entidades.Estado_civil.Obtener_Estado_civil();
            cbx_Estado_civil.DisplayMember = "Descripcion";
            cbx_Estado_civil.ValueMember = "ID";

            //Carga Sexo
            cbx_Sexo.DataSource = Sistema_financiero.Entidades.Sexo.Obtener_Sexo();
            cbx_Sexo.DisplayMember = "Descripcion";
            cbx_Sexo.ValueMember = "ID";

            //Carga Situacion IVA
            cbx_Situacion_iva.DataSource = Sistema_financiero.Entidades.Situacion_iva.Obtener_Situacion_iva();
            cbx_Situacion_iva.DisplayMember = "Descripcion";
            cbx_Situacion_iva.ValueMember = "ID";

            //Carga Condicion sellado
            cbx_Condicion_sellado.DataSource = Sistema_financiero.Entidades.Condicion_sellado.Obtener_Condicion_sellado();
            cbx_Condicion_sellado.DisplayMember = "Descripcion";
            cbx_Condicion_sellado.ValueMember = "ID";

            //Carga Tipo cuenta
            cbx_Tipo_cuenta.DataSource = Sistema_financiero.Entidades.Tipo_cuenta.Obtener_Tipo_cuenta();
            cbx_Tipo_cuenta.DisplayMember = "Descripcion";
            cbx_Tipo_cuenta.ValueMember = "ID";
        }

        private void txb_Nro_cliente_TextChanged(object sender, EventArgs e)
        {

        }

        private void label2_Click(object sender, EventArgs e)
        {

        }

        private void cbx_Provincia_SelectionChangeCommitted(object sender, EventArgs e)
        {
            cbx_Departamento.DataSource = Sistema_financiero.Entidades.Departamento.Obtener_Departamentos(Convert.ToInt32(cbx_Provincia.SelectedValue));
            cbx_Departamento.DisplayMember = "Descripcion";
            cbx_Departamento.ValueMember = "ID";
        }

        private void frm_Alta_Cliente_Load(object sender, EventArgs e)
        {
            id = -1;
        }

        private void cbx_Departamento_SelectionChangeCommitted(object sender, EventArgs e)
        {
            cbx_Localidad.DataSource = Sistema_financiero.Entidades.Localidad.Obtener_Localidades(Convert.ToInt32(cbx_Departamento.SelectedValue));
            cbx_Localidad.DisplayMember = "Descripcion";
            cbx_Localidad.ValueMember = "ID";
        }

        private void btn_Buscar_Click(object sender, EventArgs e)
        {
            frm_Buscar_Localidad Buscar_localidad = new frm_Buscar_Localidad();
            Buscar_localidad.ShowDialog();
            if (Buscar_localidad.Localidad_seleccionada != null)
            {
                cbx_Provincia.SelectedValue = Buscar_localidad.Localidad_seleccionada.Id_provincia;
                cbx_Departamento.DataSource = Sistema_financiero.Entidades.Departamento.Obtener_Departamentos(Convert.ToInt32(cbx_Provincia.SelectedValue));
                cbx_Departamento.DisplayMember = "Descripcion";
                cbx_Departamento.ValueMember = "ID";

                cbx_Departamento.SelectedValue = Buscar_localidad.Localidad_seleccionada.Id_departamento;
                cbx_Localidad.DataSource = Sistema_financiero.Entidades.Localidad.Obtener_Localidades(Convert.ToInt32(cbx_Departamento.SelectedValue));
                cbx_Localidad.DisplayMember = "Descripcion";
                cbx_Localidad.ValueMember = "ID";

                cbx_Localidad.SelectedValue = Buscar_localidad.Localidad_seleccionada.ID;

            }
        }

        private void mtbx_Numero_doc_MaskInputRejected(object sender, MaskInputRejectedEventArgs e)
        {

        }

        private void lbl_Numero_doc_Click(object sender, EventArgs e)
        {

        }

        private void button5_Click(object sender, EventArgs e)
        {
            ClienteNuevo = null;
        }

        private void chckbx_Mostrar_campos_obligatorios_CheckedChanged(object sender, EventArgs e)
        {

        }

        private void btn_Agregar_escritura_Click(object sender, EventArgs e)
        {
            frm_Alta_Escritura Alta_escritura = new frm_Alta_Escritura();
            Alta_escritura.ShowDialog();
            if (Alta_escritura.escritura != null)
            {
                Agregar_escritura(Alta_escritura.escritura);

                dgv_Escrituras.DataSource = null;
                dgv_Escrituras.DataSource = Lista_escrituras;
                dgv_Escrituras.Columns[0].Visible = false;
                dgv_Escrituras.AutoResizeColumns();
                Enable_disable_quitar_escritura(dgv_Escrituras.RowCount);
            }


        }

        public void Agregar_escritura(Entidades.Escritura escritura)
        {
            Lista_escrituras.Add(escritura);
        }

        public void Agregar_vehiculo(Entidades.Vehiculo vehiculo)
        {
            Lista_vehiculos.Add(vehiculo);
        }

        public void Enable_disable_quitar_escritura(int cantidad_filas)
        {
            dgv_Escrituras.RowHeadersVisible = false;
            if (cantidad_filas > 0)
            {
                btn_Quitar_escritura.Enabled = true;
                dgv_Escrituras.CurrentCell = dgv_Escrituras.Rows[0].Cells[1];
            }
            else
            {
                btn_Quitar_escritura.Enabled = false;
            }
        }

        public void Enable_disable_quitar_vehiculo(int cantidad_filas)
        {
            dgv_Vehiculos.RowHeadersVisible = false;
            if (cantidad_filas > 0)
            {
                btn_Quitar_vehiculo.Enabled = true;
                dgv_Vehiculos.CurrentCell = dgv_Vehiculos.Rows[0].Cells[2];
            }
            else
            {
                btn_Quitar_vehiculo.Enabled = false;
            }
        }

        private void btn_Quitar_escritura_Click(object sender, EventArgs e)
        {
            int Index_escritura_quitar;
            Index_escritura_quitar = -1;
            if (MessageBox.Show("¿Desea eliminar esta escritura?", "Confirmación", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            {
                Escritura_quitar.Numero = Convert.ToInt32(dgv_Escrituras[1, dgv_Escrituras.CurrentRow.Index].Value);
                Escritura_quitar.Folio = Convert.ToInt32(dgv_Escrituras[2, dgv_Escrituras.CurrentRow.Index].Value);
                Escritura_quitar.Tomo = Convert.ToString(dgv_Escrituras[3, dgv_Escrituras.CurrentRow.Index].Value);
                Escritura_quitar.Fecha = Convert.ToDateTime(dgv_Escrituras[4, dgv_Escrituras.CurrentRow.Index].Value);
                Escritura_quitar.Departamento = Convert.ToString(dgv_Escrituras[5, dgv_Escrituras.CurrentRow.Index].Value);

                foreach (Entidades.Escritura E in Lista_escrituras)
                {
                    if ((E.Numero == Escritura_quitar.Numero) && (E.Folio == Escritura_quitar.Folio) &&
                        (E.Tomo == Escritura_quitar.Tomo) && (E.Fecha == Escritura_quitar.Fecha) && (E.Departamento == Escritura_quitar.Departamento))
                    {
                        Index_escritura_quitar = Lista_escrituras.IndexOf(E);
                        break;
                    }
                }
                Lista_escrituras.RemoveAt(Index_escritura_quitar);
                dgv_Escrituras.DataSource = null;
                dgv_Escrituras.DataSource = Lista_escrituras;
                dgv_Escrituras.Columns[0].Visible = false;
                dgv_Escrituras.AutoResizeColumns();

                Enable_disable_quitar_escritura(dgv_Escrituras.RowCount);
            }

        }

        private void cbx_Provincia_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        private void btn_Agregar_vehiculo_Click(object sender, EventArgs e)
        {
            frm_Alta_Vehiculo Alta_vehiculo = new frm_Alta_Vehiculo();
            Alta_vehiculo.ShowDialog();
            if (Alta_vehiculo.Vehiculo != null)
            {
                Agregar_vehiculo(Alta_vehiculo.Vehiculo);
                dgv_Vehiculos.DataSource = null;
                dgv_Vehiculos.DataSource = Lista_vehiculos;
                dgv_Vehiculos.Columns[0].Visible = false;
                dgv_Vehiculos.Columns[1].Visible = false;
                dgv_Vehiculos.Columns[2].HeaderText = "Vehículo";
                dgv_Vehiculos.Columns[5].HeaderText = "Año";
                dgv_Vehiculos.AutoResizeColumns();
                Enable_disable_quitar_vehiculo(dgv_Vehiculos.RowCount);
            }

        }

        private void btn_Quitar_vehiculo_Click(object sender, EventArgs e)
        {
            int Index_vehiculo_quitar;
            Index_vehiculo_quitar = -1;
            if (MessageBox.Show("¿Desea eliminar este vehículo?", "Confirmación", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            {
                Vehiculo_quitar.Id_tipo_vehiculo = Convert.ToInt32(dgv_Vehiculos[1, dgv_Vehiculos.CurrentRow.Index].Value);
                Vehiculo_quitar.Tipo_vehiculo = Convert.ToString(dgv_Vehiculos[2, dgv_Vehiculos.CurrentRow.Index].Value);
                Vehiculo_quitar.Marca = Convert.ToString(dgv_Vehiculos[3, dgv_Vehiculos.CurrentRow.Index].Value);
                Vehiculo_quitar.Modelo = Convert.ToString(dgv_Vehiculos[4, dgv_Vehiculos.CurrentRow.Index].Value);
                Vehiculo_quitar.Anio = Convert.ToInt32(dgv_Vehiculos[5, dgv_Vehiculos.CurrentRow.Index].Value);
                Vehiculo_quitar.Dominio = Convert.ToString(dgv_Vehiculos[6, dgv_Vehiculos.CurrentRow.Index].Value);
                foreach (Entidades.Vehiculo V in Lista_vehiculos)
                {
                    if ((V.Id_tipo_vehiculo == Vehiculo_quitar.Id_tipo_vehiculo) && (V.Marca == Vehiculo_quitar.Marca)
                        && (V.Modelo == Vehiculo_quitar.Modelo) && (V.Anio == Vehiculo_quitar.Anio) && (V.Dominio == Vehiculo_quitar.Dominio))
                    {
                        Index_vehiculo_quitar = Lista_vehiculos.IndexOf(V);
                        break;
                    }
                }
                Lista_vehiculos.RemoveAt(Index_vehiculo_quitar);

                dgv_Vehiculos.DataSource = null;
                dgv_Vehiculos.DataSource = Lista_vehiculos;
                dgv_Vehiculos.Columns[0].Visible = false;
                dgv_Vehiculos.Columns[1].Visible = false;
                dgv_Vehiculos.Columns[2].HeaderText = "Vehículo";
                dgv_Vehiculos.Columns[5].HeaderText = "Año";
                dgv_Vehiculos.AutoResizeColumns();

                Enable_disable_quitar_vehiculo(dgv_Vehiculos.RowCount);
            }

        }

        private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            Control.Textbox_restricciones.Permitir_solo_numeros(e);

        }

        private void tbx_Numero_doc_TextChanged(object sender, EventArgs e)
        {

        }

        private void tbx_Legajo_KeyPress(object sender, KeyPressEventArgs e)
        {
            Control.Textbox_restricciones.Permitir_solo_numeros(e);
        }

        private void txb_Sueldo_KeyDown(object sender, KeyEventArgs e)
        {

        }

        private void txb_Sueldo_KeyPress(object sender, KeyPressEventArgs e)
        {
            Control.Textbox_restricciones.Permitir_solo_numeros(e);
        }

        private void mtbx_Fecha_nacimiento_Validating(object sender, CancelEventArgs e)
        {

        }

        private void mtbx_Fecha_nacimiento_TypeValidationCompleted(object sender, TypeValidationEventArgs e)
        {
            Control.Textbox_restricciones.Validar_fecha(mtbx_Fecha_nacimiento, e);
        }

        private void btn_Aceptar_Click(object sender, EventArgs e)
        {
            string domicilio, telefono1, telefono2, telefono3, detalle_titulares, lugar_trabajo, padre, madre, conyuge, observaciones, legajo, sueldo;


            if ((!String.IsNullOrEmpty(tbx_Apellido.Text)) && (!String.IsNullOrEmpty(tbx_Nombre.Text)) && (!String.IsNullOrEmpty(tbx_Numero_doc.Text)) && (!mtbx_Fecha_nacimiento.MaskCompleted == false))
            {
                Entidades.Cliente Cliente = new Sistema_financiero.Entidades.Cliente();

                Cliente.Apellido = (tbx_Apellido.Text);
                Cliente.Nombres = (tbx_Nombre.Text);

                Cliente.ID = Convert.ToInt32(tbx_Nro_cliente.Text);
                Cliente.Id_localidad = Convert.ToInt32(cbx_Localidad.SelectedValue);
                Cliente.Id_tipo_doc = Convert.ToInt32(cbx_Tipo_doc.SelectedValue);
                Cliente.Num_doc = Convert.ToInt32(tbx_Numero_doc.Text);
                Cliente.Id_estado_civil = Convert.ToInt32(cbx_Estado_civil.SelectedValue);
                Cliente.Fecha_nacimiento = Convert.ToDateTime(mtbx_Fecha_nacimiento.Text);

                Cliente.Id_situacion_iva = Convert.ToInt32(cbx_Situacion_iva.SelectedValue);
                Cliente.Id_cond_sellado = Convert.ToInt32(cbx_Condicion_sellado.SelectedValue);
                Cliente.Id_tipo_cuenta = Convert.ToInt32(cbx_Tipo_cuenta.SelectedValue);
                Cliente.Id_sexo = Convert.ToInt32(cbx_Sexo.SelectedValue);


                domicilio = Nulo_completar_comilla(tbx_Domicilio);
                telefono1 = Nulo_completar_comilla(tbx_Telefono1);
                telefono2 = Nulo_completar_comilla(tbx_Telefono2);
                telefono3 = Nulo_completar_comilla(tbx_Telefono3);
                detalle_titulares = Nulo_completar_comilla(tbx_Detalle_titulares);
                lugar_trabajo = Nulo_completar_comilla(tbx_Lugar_trabajo);
                padre = Nulo_completar_comilla(tbx_Padre);
                madre = Nulo_completar_comilla(tbx_Madre);
                conyuge = Nulo_completar_comilla(tbx_Conyuge);
                observaciones = Nulo_completar_comilla(tbx_Observaciones);
                legajo = Nulo_completar_comilla(tbx_Legajo);
                sueldo = Nulo_completar_comilla(tbx_Sueldo);

                Cliente.Id_sexo = Convert.ToInt32(cbx_Sexo.SelectedValue);


                Entidades.Cliente.Insertar_nuevo_cliente(Cliente.Apellido, Cliente.Nombres, domicilio, telefono1, telefono2, telefono3, Cliente.Id_localidad, Cliente.Id_tipo_doc,
                Cliente.Num_doc, Cliente.Id_estado_civil, Cliente.Fecha_nacimiento, padre, madre,
                conyuge, observaciones, Cliente.Id_situacion_iva, Cliente.Id_cond_sellado, Cliente.Id_tipo_cuenta,
                detalle_titulares, lugar_trabajo, legajo, sueldo, Cliente.Id_sexo);

                if (Lista_escrituras.Count > 0)
                {
                    foreach (Entidades.Escritura E in Lista_escrituras)
                    {
                        Entidades.Escritura.Guardar_escritura(E, tbx_Nro_cliente.Text);
                    }
                }
                ClienteNuevo = Cliente;
                id = Cliente.ID;
                id_situacion_iva = Cliente.Id_situacion_iva;
                apellido = Cliente.Apellido;
                nombres = Cliente.Nombres;
                MessageBox.Show("Garante guardado con éxito", "Nuevo garante", MessageBoxButtons.OK, MessageBoxIcon.Information);
                this.Close();
            }
            else
            {
                MessageBox.Show("Quedan campos obligatorios por completar. <Ver resaltados>", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                Control.Textbox_restricciones.Campo_obligatorio(tbx_Apellido);
                Control.Textbox_restricciones.Campo_obligatorio(tbx_Nombre);
                Control.Textbox_restricciones.Campo_obligatorio(tbx_Numero_doc);
                Control.Textbox_restricciones.Campo_obligatorio(mtbx_Fecha_nacimiento);

            }

        }
        private string Nulo_completar_comilla(TextBox Textbox)
        {
            string resultado;
            if (!String.IsNullOrEmpty(Textbox.Text))
            {
                resultado = "'";
                resultado = resultado + Textbox.Text;
                resultado = resultado + "'";
            }
            else
            {
                resultado = "NULL";
            }
            return resultado;
        }



    }
}